package org.example.software.service.impl;

import org.example.software.entity.Forum;
import org.example.software.entity.ProductMessage;
import org.example.software.exception.MyException;
import org.example.software.mapper.ModelProductMapper;
import org.example.software.mapper.ProductMessageMapper;
import org.example.software.mapper.UserMapper;
import org.example.software.service.ProductMessageService;
import org.example.software.utils.JwtUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;

@Service
public class ProductMessageServiceImpl implements ProductMessageService {

    @Autowired
    private UserMapper userMapper;

    @Autowired
    private ModelProductMapper modelProductMapper;

    @Autowired
    private ProductMessageMapper productMessageMapper;

    //用户商品留言
    @Override
    public boolean addProductMessage(String token, ProductMessage productMessage) {
        // 从 Token 中解析用户账号
        String userId = JwtUtil.getUserIdFromToken(token);
        if (userId == null || userId.isEmpty()) {
            MyException.throwError("无效的 Token 或没有登录账号", 401);
        }

        // 设置用户账号、姓名、当前日期、评分和留言
        productMessage.setUserID(userId);
        productMessage.setName(userMapper.getUserNameById(userId));
        productMessage.setDate(LocalDateTime.now());

        // 检查留言内容是否为空
        if (productMessage.getContent() == null || productMessage.getContent().isEmpty()) {
            MyException.throwError("留言内容不能为空", 400);
        }

        // 检查评分是否有效 (只能输入 1 到 5 的整数)
        String score = productMessage.getScore();
        if(!score.equals("1") && !score.equals("2") && !score.equals("3") && !score.equals("4") && !score.equals("5")){
            MyException.throwError("评分必须在 1 到 5 之间", 400);
        }

        // 设置评分和留言内容
        productMessage.setScore(score);
        productMessage.setContent(productMessage.getContent());

        // 保存留言
        return productMessageMapper.insert(productMessage) > 0;
    }

    //删除留言
    @Override
    public boolean deleteProductMessage(String token, int id) {
        // 检查是否为管理员
        boolean isAdmin = JwtUtil.isAdmin(token);
        if (!isAdmin) {
            // 如果不是管理员，解析用户账号
            String userId = JwtUtil.getUserIdFromToken(token);
            if (userId == null || userId.isEmpty()) {
                MyException.throwError("无效的 Token 或没有登录账号", 401);
            }

            // 查询留言详情
            ProductMessage productMessage = productMessageMapper.selectById(id);
            if (productMessage == null) {
                MyException.throwError("留言不存在", 404);
            }

            // 检查是否是留言的创建者
            if (!userId.equals(productMessage.getUserID())) {
                MyException.throwError("无权限删除该留言", 403);
            }
        } else {
            // 管理员无需校验用户身份，直接允许删除
            if (productMessageMapper.selectById(id) == null) {
                MyException.throwError("留言不存在", 404);
            }
        }

        // 执行删除操作
        return productMessageMapper.deleteById(id) > 0;
    }

}
